#include <stdio.h>
#include <time.h>

// 假设TIME是一个32位整数，其中：
// 小时占据0-4位
// 分钟占据5-10位
// 秒占据11-15位
#define MASK_HOUR 0x1F        // 0001 1111
#define MASK_MINUTE 0x7FF     // 0111 1111 1111
#define MASK_SECOND 0x7FFF    // 0111 1111 1111 1111
#define SHIFT_HOUR 0
#define SHIFT_MINUTE 5
#define SHIFT_SECOND 11

unsigned int TIME = 0;

void setHour(int h) {
    TIME &= ~(MASK_HOUR << SHIFT_HOUR);  // 清除当前小时位
    TIME |= (h & MASK_HOUR) << SHIFT_HOUR;  // 设置新的小时位
}

void setMinute(int m) {
    TIME &= ~(MASK_MINUTE << SHIFT_MINUTE);  // 清除当前分钟位
    TIME |= (m & MASK_MINUTE) << SHIFT_MINUTE;  // 设置新的分钟位
}

void setSecond(int s) {
    TIME &= ~(MASK_SECOND << SHIFT_SECOND);  // 清除当前秒位
    TIME |= (s & MASK_SECOND) << SHIFT_SECOND;  // 设置新的秒位
}

int main() {
    time_t rawtime;
    struct tm * timeinfo;

    time(&rawtime);  // 获取当前时间
    timeinfo = localtime(&rawtime);  // 转换为当地时间

    // 使用位运算函数设置时间
    setHour(timeinfo->tm_hour);
    setMinute(timeinfo->tm_min);
    setSecond(timeinfo->tm_sec);

    // 打印设置的时间
    printf("Current TIME is: 0x%X\n", TIME);

    return 0;
}

